﻿//#include<stdio.h>
//
//int func(int x)
//{
//	int count = 0;
//	while (x)
//	{
//		count++;
//		x = x & (x - 1);//与运算
//	}
//	return count;
//}
//
//int main()
//{
//
//	int c=func(-1);
//	printf("%d", c);
//	return 0;
//}


//写一个函数，求两个整数之和，要求在函数体内不得使用 + 、 - 、 * 、 / 四则运算符号。
//
//数据范围：两个数都满足 - 10 \le n \le 1000−10≤n≤1000
//进阶：空间复杂度 O(1)O(1)，时间复杂度 O(1)O(1)
//int Add(int num1, int num2)
//{
//    // write code here
//    int ret = 0;
//    while (num2)
//    {
//        ret = num1 ^ num2;
//        num2 = num1 & num2;
//        num2 = num2 << 1;
//        num1 = ret;
//
//    }
//
//    ret = num1;
//    return ret;
//}


//给定一个二进制数组 nums ， 计算其中最大连续 1 的个数。

int findMaxConsecutiveOnes(int* nums, int numsSize)
{
    int x = 0, ret = 0;
    for (int i = 0; i < numsSize; i++)
    {
        if (nums[i] == 1)
        {
            ++x;
        }
        else
        {
            if (x > ret)
            {
                ret = x;
            }
            x = 0;
        }
    }
    if (x > ret)
    {
        ret = x;
    }
    return ret;

}

//
//完全数（Perfect number），又称完美数或完备数，是一些特殊的自然数。
//
//它所有的真因子（即除了自身以外的约数）的和（即因子函数），恰好等于它本身。
//
//例如：28，它有约数1、2、4、7、14、28，除去它本身28外，其余5个数相加，1 + 2 + 4 + 7 + 14 = 28。
//
//输入n，请输出n以内(含n)完全数的个数。
//
//数据范围： 1 \le n \le 5 \times 10 ^ {5} \1≤n≤5×10
//5

#include <stdio.h>
#include <stdbool.h>
bool ispernum(int num)
{
    //求真因子
    int realx = 0;
    for (int i = 1; i < num; i++)
    {
        if (num % i == 0)
        {
            //真因子相加
            realx += i;
        }
    }

    //判断
    if (realx == num)
    {
        return true;
    }
    else
    {
        return false;
    }


}


int main()
{
    int n = 0, count = 0;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
    {
        if (ispernum(i))
        {
            count++;;
        }
    }
    printf("%d", count);
    return 0;
}